/**
 * Created by apple on 2017/6/8.
 */

var express = require('express');
var router = express.Router();

var vipMngRouter = module.exports;
var AdminToken = require('../db/user_tokens.js');
var vipAdmin = require('../dao/vip.js');


/**
 * 系统管理员、产品管理员添加vip
 * @param  token 管理员
 *         url/vip_management/addApp
 */
vipMngRouter.addVip = function(req, res) {
    var par = paramAll(req);

    if(!par.sid){
        res.json(new ERR('sid不为空', 400));
        return;
    }

    if(!par.app_sid){
        res.json(new ERR('app_sid不为空', 400));
        return;
    }


    router.checkParAndAdm(par,false,true,function (err,errCode,appInfo) {

        if(err){
            res.json(new ERR(err, errCode));
            return;
        }

        appInfo.type = par.type ? par.type : 0;


        vipAdmin.addVip(appInfo,function (err) {
            if(err){
                console.log(err);
                res.json(new ERR(err, 400));
                return;
            }

            res.json(new PKG(appInfo));

        });

    });

}
router.post('/addVip', vipMngRouter.addVip);

/**
* 系统管理员、产品管理员添加vip可购项目
* @param  token 管理员
*         url/vip_management/addApp
*/
vipMngRouter.addVipItem = function(req, res) {
    var par = paramAll(req);

    if(!par.app_sid){
        res.json(new ERR('sid不为空', 400));
        return;
    }

    if(!par.vip_sid){
        res.json(new ERR('vip_sid不为空', 400));
        return;
    }

    if(!par.lvl){
        res.json(new ERR('lvl不为空', 400));
        return;
    }

    if(!par.price){
        res.json(new ERR('价格不为空', 400));
        return;
    }

    router.checkParAndAdm(par,false,false,function (err,errCode,appInfo) {

        if(err){
            res.json(new ERR(err, errCode));
            return;
        }

        vipAdmin.addVipItem(appInfo,function (err) {
            if(err){
                console.log(err);
                res.json(new ERR(err, 400));
                return;
            }

            res.json(new PKG(appInfo));

        });

    });

}
router.post('/addVipItem', vipMngRouter.addVipItem);


/**
 * 系统管理员、产品管理员更新vip
 * @param  token 管理员
 *         url/vip_management/updateVip
 */
vipMngRouter.updateVip = function(req, res) {

    var par = paramAll(req);

    if(!par.sid){
        res.json(new ERR('sid不为空', 400));
        return;
    }

    if(!par.app_sid){
        res.json(new ERR('app_sid不为空', 400));
        return;
    }

    router.checkParAndAdm(par,true,true,function (err,errCode,vipInfo) {

        if(err){
            res.json(new ERR(err, errCode));
            return;
        }


        vipAdmin.updateVip(vipInfo,function (err) {
            if(err){
                console.log(err);
                res.json(new ERR(err, 400));
                return;
            }

            res.json(new PKG('操作成功'));

        });

    });


}
router.post('/updateVip', vipMngRouter.updateVip);


/**
 * 系统管理员、产品管理员更新vip可购项目
 * @param  token 管理员
 *         url/vip_management/updateVip
 */
vipMngRouter.updateVipItem = function(req, res) {

    var par = paramAll(req);

    if(!par.app_sid){
        res.json(new ERR('app_sid不为空', 400));
        return;
    }

    if(!par.id){
        res.json(new ERR('id不为空', 400));
        return;
    }


    router.checkParAndAdm(par,true,false,function (err,errCode,vipInfo) {

        if(err){
            res.json(new ERR(err, errCode));
            return;
        }

        vipAdmin.updateVipItem(vipInfo,function (err) {
            if(err){
                console.log(err);
                res.json(new ERR(err, 400));
                return;
            }

            res.json(new PKG('操作成功'));

        });

    });

}
router.post('/updateVipItem', vipMngRouter.updateVipItem);



/**
 * 系统管理员、产品管理员查看vip项目
 * @param  token 管理员
 *         url/app_management/vipList
 */
vipMngRouter.vipList = function(req, res) {

    router.vipOrItemList(req,true,res);

}
router.post('/vipList', vipMngRouter.vipList);


/**
 * 系统管理员、产品管理员查看vip可购项目
 * @param  token 管理员
 *         url/app_management/vipList
 */
vipMngRouter.vipItemList = function(req, res) {

    router.vipOrItemList(req,false,res);

}
router.post('/vipItemList', vipMngRouter.vipItemList);

/**
 * 抽取  查询vip或vip可购项目列表 的具体操作
 * isVip = true : 查询vip   false : 查询vip item
*/
router.vipOrItemList = function (req,isVip,res) {
    var par = paramAll(req);
    router.checkAdmin(par,function (err,errCode) {

        if(err){
            res.json(new ERR(err, errCode));
            return;
        }

        vipAdmin.vipOrItemList(par, isVip, function (err,result) {
            if(err){
                console.log(err);
                res.json(new ERR(err, 400));
                return;
            }

            var list = {};
            if(isVip){
                list.vipList = result;
            }else {
                list.vipItemList = result;
            }
            res.json(new PKG(result));

        });

    });
}

/**
 * 抽取  添加、修改vip校验请求的参数以及管理员权限
 * par 请求的参数
 * isUpdate  ture 更新数据      false 修改数据
 * isVip     ture 操作的是vip   false 操作的是vip可购项目
 * cb 返回
 */
router.checkParAndAdm = function (par,isUpdate,isVip,cb) {


    if(!par.token){
        cb('token不为空',400);
        return;
    }

    AdminToken.checkAdminLogin(par.token,par.app_sid, function (err,errCode, adminInfo) {
        if (err) {
            cb(err,errCode);
            return;
        }

        var vipInfo = {
        }
        var parCount = 0;
        if(isVip == true) { //检查vip的参数par要修改或添加哪些

            //固有参数
            vipInfo.app_sid = par.app_sid;
            vipInfo.sid = par.sid;

            if (par.top_lvl) {
                vipInfo.top_lvl = par.top_lvl;
                parCount++;
            }
            if (par.name) {
                vipInfo.name = par.name;
                parCount++;
            }
            if (par.comment) {
                vipInfo.comment = par.comment;
                parCount++;
            }
            if (par.status) {
                vipInfo.status = par.status;
                parCount++;
            }


        }else {  //检查vip可购项目的参数par要修改或添加哪些

            //固有参数
            if(par.id) {
                vipInfo.id = par.id;
            }
            if(isUpdate == false){
                vipInfo.app_sid = par.app_sid;
                vipInfo.vip_sid = par.vip_sid;
                vipInfo.lvl = par.lvl;
            }

            if (par.price) {
                vipInfo.price = par.price;
                parCount++;
            }
            if (par.duration) {
                vipInfo.duration = par.duration;
                parCount++;
            }
            if (par.name) {
                vipInfo.name = par.name;
                parCount++;
            }
            if (par.discount) {
                vipInfo.discount = par.discount;
                parCount++;
            }
            if (par.status) {
                vipInfo.status = par.status;
                parCount++;
            }
            if (par.multi_rate) {
                vipInfo.multi_rate = par.multi_rate;
                parCount++;
            }

        }

        //如果是修改vip，一定要带上修改的字段
        if (isUpdate == true && parCount == 0) {
            cb('无效参数', 400);
            return;
        }

        //为了增加运维日志log
        if(isUpdate == true) {
            vipInfo.account = adminInfo.account;
            vipInfo.adm_uid = adminInfo.uid;
        }

        cb(null,0,vipInfo);

    });

}


/**
 * 抽取  查询vip 校验管理员权限及app_sid参数
 * par 请求的参数
 * cb 返回
 *         url/app_management/updateApp
 */
router.checkAdmin = function (par,cb) {


    if(!par.token){
        cb('token不为空',400);
        return;
    }

    if(!par.app_sid){
        cb('app_sid不为空',400);
        return;
    }

    if(par.status){
        if(par.status != 0 && par.status != 1){
            cb('status有误',400);
            return;
        }
    }

    AdminToken.checkLogin(par.token, function (err, adminInfo) {
        if (err) {
            cb(err,400);
            return;
        }

        if (!adminInfo) {
            cb('请先登录',403);
            return;
        }


        //检查是不是系统管理员或产品管理员
        if(adminInfo.role.indexOf('admin') < 0 && adminInfo.role.indexOf('adm_'+par.app_sid) < 0){
            cb('无权限',400);
            return;
        }
        cb(null,0);
    });

}


/**
 *  usuz服务器设置usuz特殊会员权限，加服务器间通信验证
 */
vipMngRouter.setUSUZFirstVip = function (req,res) {
    var par = paramAll(req);
    console.log(par);
    if(par.app_key != 'usuz') return res.json(new ERR('访问受限',400));
    if(!checkSrvConnection(par)) return res.json(new ERR('访问受限',400));

    AdminToken.checkLogin(par.token,function (err,userInfo) {
        if(err) return res.json(new ERR(err, 400));
        if(!userInfo) return res.json(new ERR(err, 403));
        par.uid = userInfo.uid;
        par.account = userInfo.account;
        vipAdmin.setUSUZFirstVip(par,function (err,result) {
            if(err) return res.json(new ERR(err, 400));
            return res.json(new PKG(result));
        });
    });

}
router.post('/setUSUZFirstVip', vipMngRouter.setUSUZFirstVip);


/**
 *  usuz服务器设置usuz特殊会员权限，加服务器间通信验证
 *  如果有传recommenderCode，则查的是推荐人的
 */
vipMngRouter.getIsUSUZVip = function (req,res) {
    var par = paramAll(req);
    if(par.accounts) par.accounts = par.accounts.split(',');
    if(!par.app_sid) return res.json(new ERR('产品标识不为空', 400));
    AdminToken.checkLogin(par.token,function (err,userInfo) {
        if(err) return res.json(new ERR(err, 400));
        if(!userInfo) return res.json(new ERR('请先登录', 403));
        par.uid = userInfo.uid;
        if(par.recommenderCode) par.uid = codeToUid(par.recommenderCode);
        vipAdmin.getIsUSUZVip(par,function (err,result) {
            if(err) return res.json(new ERR(err, 400));
            result.srvTime = new Date().getTime();
            return res.json(new PKG(result));
        });
    });

}
router.post('/get_is_usuz_vip', vipMngRouter.getIsUSUZVip);


/**
 *  param
 *  app_sid:'usuz'
 *  vip_sid (可选)
 *  account (可选)
 *  startTime (可选)
 *  endTime (可选)
 *  page
 *  pageSize
 *  url:vip_management/userVipList
 */
vipMngRouter.userVipList = function (req,res) {
    var par = paramAll(req);
    AdminToken.checkAdminToken(par.token,function (err,errCode,adminInfo) {
        if(err) return res.json(new ERR(err, errCode));
        vipAdmin.userVipList(par,function (err,result) {
            if(err) return res.json(new ERR(err, 400));
            return res.json(new PKG(result));
        });
    });
};
router.post('/userVipList', vipMngRouter.userVipList);


module.exports = router;